// ==UserScript==
// @name        YE功能增强.08 - [禅道]
// @description 禅道项目管理平台相关的个人增强脚本
// @namespace   http://AsionTang.CN
// @copyright   2016+, AsionTang
// @author      AsionTang
// @version     170217.02.07.008
// @iconURL     http://g.cn/favicon.ico
// @run-at      document-start
// @downloadURL https://gitee.com/AsionTang/52.ScriptLibrary/raw/master/YeJS/08.ZenDao.user.js
// @match       *://192.168.1.222/*
// @grant       GM_openInTab
// @grant       GM_setClipboard
// ==/UserScript==
//================================================================
// 002.在admin用户的查询界面展示下属员工的所有任务和Bug列表.
//================================================================
(function() {
    if (!isMatch('*/zentao/user-*-admin*'))
        return;
    function x(user, method, onSuccess) {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function(e) {
            if (xhr.readyState == 4 && xhr.status == 200) {
                try {
                    var responseObj = JSON.parse(xhr.responseText);
                    var data = JSON.parse(responseObj.data);
                    //console.dir(data);
                    onSuccess(data);
                } catch (ex) {
                    console.log('异常返回URL为:' + xhr.url);
                    console.log('异常返回值为:' + xhr.responseText);
                    console.dir(xhr);
                    console.dir(ex);
                }
            }
        }
        var url = '/zentao/user-' + method + '-' + user + '-assignedTo-id_desc--2000-1.json';
        xhr.open("GET", url, true);
        xhr.send();
    }
    function g(user, onSuccess) {
        x(user, "story", function(data1) {
            x(user, "task", function(data2) {
                x(user, "bug", function(data3) {
                    onSuccess(data2.user, data1.stories, data2.tasks, data3.bugs);
                });
            });
        });
    }
    function getStoryStatus(status) {
        switch (status) {
        case 'active':
            return '激　活';
        case 'closed':
            return '<span style="color:green;">已关闭</span>';
        case 'changed':
            return '<span style="color:red;">已变更</span>';
        case 'draft':
            return '<span style="color:darkred;">草　稿</span>';
        default:
            return status;
        }
    }
    function getTaskStatus(status) {
        switch (status) {
        case 'wait':
            return '未开始';
        case 'done':
            return '<span style="color:green;">已完成</span>';
        case 'doing':
            return '<span style="color:red;">进行中</span>';
        case 'pause':
            return '已暂停';
        case 'cancel':
            return '<span style="color:darkred;">已取消</span>';
        case 'closed':
            return '已关闭';
        default:
            return status;
        }
    }
    function getBugStatus(status) {
        switch (status) {
        case 'active':
            return '未修复';
        case 'closed':
            return '<span style="color:gay;">已关闭</span>';
        case 'resolved':
            return '<span style="color:green;">已修复</span>';
        default:
            return status;
        }
    }
    function getFixLength(txt, length) {
        var c = length - txt.length;
        if (c <= 0)
            return txt;
        var paddingChar = '&nbsp;';
        for (var i = 0; i < c; i++)
            paddingChar += paddingChar;
        return paddingChar + txt;
    }
    function getFixLengthCN(txt, length) {
        var c = length - txt.length;
        if (c <= 0)
            return txt;
        var paddingChar = '';
        for (var i = 0; i < c; i++)
            paddingChar += '　';
        return paddingChar + txt;
    }
    function getStoryA(id) {
        //http://192.168.1.222:303/zentao/story-view-748.html
        return '<a target="_blank" href="/zentao/story-view-' + id + '.html">' + getFixLength(id, 5) + '</a>';
    }
    function getTaskA(id) {
        //http://192.168.1.222:303/zentao/task-view-7302.html
        return '<a target="_blank" href="/zentao/task-view-' + id + '.html">' + getFixLength(id, 5) + '</a>';
    }
    function getBugA(id) {
        //http://192.168.1.222:303/zentao/bug-view-7302.html
        return '<a target="_blank" href="/zentao/bug-view-' + id + '.html">' + getFixLength(id, 5) + '</a>';
    }
    var resultHTML = '';
    function appendLine(line) {
        resultHTML += line + '<br/>';
    }
    function append(line) {
        resultHTML += line;
    }
    function a(user) {
        var newLine = '<br/>　　';
        g(user, function(user, stories, tasks, bugs) {
            //=================================================================================================
            // 判断是否为当前自己的帐号信息，可做一些醒目标识。
            //=================================================================================================
            var isMySelf = false;
            //=================================================================================================
            //显示用户信息
            //=================================================================================================
            {
                console.dir(user);
                //appendLine('<h4>' + user.realname + '</h4>');
                //
                //当前帐号名字和需要显示的名字一样时,则认为是自己的任务和BUG,此时为了操作方便把我的BUG和我的任务入口也列出来.
                var currentAccountRealName = document.querySelector('#userMenu .icon-user').nextSibling.textContent;
                if (currentAccountRealName.indexOf(user.realname) > -1) {
                    isMySelf = true;
                    //醒目标识自己的内容
                    appendLine('<div style="background-color: #CCE8CF;">');
                    //一些快速跳转入口
                    //appendLine('<h5><a target="_blank" href="/zentao/my-story-assignedTo.html">我的需求</a></h5>');
                    //appendLine('<h5><a target="_blank" href="/zentao/my-task-assignedTo.html">我的任务</a></h5>');
                    //appendLine('<h5><a target="_blank" href="/zentao/my-bug-assignedTo.html">我的BUG</a></h5>');
                }
            }
            //=================================================================================================
            //显示需求列表
            //=================================================================================================
            {
                console.dir(stories);
                if (stories.length > 0) {
                    var t = getFixLengthCN(user.realname, 3) + ' - 需求 - ' + stories.length;
                    if (isMySelf) {
                        appendLine('<h5><a target="_blank" href="/zentao/my-story-assignedTo.html">' + t + '</a></h5>');
                    } else
                        append('<h5>' + t + '</h5>');
                    //
                    for (var i = 0; i < stories.length; i++) {
                        var story = stories[i];
                        appendLine('　　　　' + story.openedDate + "　　" + getStoryA(story.id) + "　　" + getStoryStatus(story.status) + "　　" + story.title);
                    }
                }
            }
            //=================================================================================================
            //显示任务列表
            //=================================================================================================
            {
                console.dir(tasks);
                if (tasks.length > 0) {
                    var t = getFixLengthCN(user.realname, 3) + ' - 任务 - ' + tasks.length;
                    if (isMySelf) {
                        appendLine('<h5><a target="_blank" href="/zentao/my-task-assignedTo.html">' + t + '</a></h5>');
                    } else
                        append('<h5>' + t + '</h5>');
                    //
                    for (var i = 0; i < tasks.length; i++) {
                        var task = tasks[i];
                        appendLine('　　　　' + task.openedDate + "　　" + getTaskA(task.id) + "　　" + getTaskStatus(task.status) + "　　" + task.name);
                    }
                }
            }
            //=================================================================================================
            //显示Bug列表
            //=================================================================================================
            {
                console.dir(bugs);
                if (bugs.length > 0) {
                    var t = getFixLengthCN(user.realname, 3) + ' - 臭虫 - ' + bugs.length;
                    if (isMySelf) {
                        appendLine('<h5><a target="_blank" href="/zentao/my-bug-assignedTo.html">' + t + '</a></h5>');
                    } else
                        append('<h5>' + t + '</h5>');
                    //
                    for (var i = 0; i < bugs.length; i++) {
                        var bug = bugs[i];
                        appendLine('　　　　' + bug.openedDate + "　　" + getBugA(bug.id) + "　　" + getBugStatus(bug.status) + "　　" + bug.title);
                    }
                }
            }
            if (isMySelf)
                appendLine('</div>');
            //显示所有内容到界面.
            document.querySelector('#wrap table').innerHTML = resultHTML;
        });
    }
    //Utils EOF
    //
    //
    //Function Start
    //
    //
    //显示用户信息
    a('asiontang');
    a('yangsong');
    a('jiangting');
    a('yusw');
    a('zhanglong');
    //
}
)();
//================================================================
// 001.[禅道]批量创建Android和iOS开发任务
//================================================================
(function() {
    if (!isMatch('*/zentao/task-batchCreate*'))
        return;
    function doit() {
        console.log('002功能初始化中');
        var newBtn = document.createElement('A');
        newBtn.className = 'btn btn-back';
        newBtn.innerText = '批量创建Android和iOS开发任务';
        //
        newBtn.onclick = function(e) {
            var 需求文本 = document.querySelector('#story0_chosen span').title.replace(/\[p\d+, \d+h\]/g, '');
            //
            document.getElementById('name[0]').value = 'Android｜' + 需求文本;
            document.getElementById('name[1]').value = 'iOS｜' + 需求文本;
            //
            document.getElementById('type0').value = 'devel';
        }
        ;
        //
        var submitBtn = document.getElementById('submit');
        submitBtn.parentElement.insertBefore(newBtn, submitBtn);
        clearInterval(window.ye);
        console.log('002功能初始化完毕.');
    }
    ;document.ondblclick = doit;
    window.ye = setInterval(doit, 100);
}
)();
//================================================================
// Utils Js
//================================================================
/* 检测当前网址是否匹配 */
function isMatch(regStr) {
    return new RegExp(regStr.replace(/\*/g, '.*'),'gi').test(location.href)
}
/* 通用注入原型4：支持直接将URL注入到原网页 */
function inject(funcOrUrl) {
    var YETAG;
    YETAG = document.createElement('script');
    YETAG.type = 'text/javascript';
    YETAG.id = 'YEJS_' + +new Date();
    if (typeof (funcOrUrl) == 'function') {
        var YEJS = "";
        YEJS += "//================== [YEJS START] =======================";
        YEJS += "\n(";
        YEJS += funcOrUrl;
        YEJS += ")();\n";
        YEJS += "//================== [YEJS ENDED] =======================";
        YETAG.innerHTML = YEJS;
    } else
        YETAG.src = funcOrUrl;
    document.body.appendChild(YETAG);
}
